package com.demoweb.tetris;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.demoweb.model.dao.UploadFileDao;
import com.demoweb.model.dto.UploadFile;

@WebServlet("/tetris/gamedownload.action")
public class DownloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

//		//1. uploadview에서 선택한 첨부파일번호를 읽어서 변수에 저장
//		//   (없으면 uploadview로 이동)
//		if (request.getParameter("uploadfileno") == null ||
//			request.getParameter("uploadfileno").length() == 0) {
//			response.setContentType("text/html;charset=euc-kr");
//			PrintWriter out = response.getWriter();
//			out.println("<script type='text/javascript'>");
//			out.println("alert('다운로드 실패');");
//			out.println("history.back();");//이전 페이지로 이동
//			out.println("</script>");
			
//			response.sendRedirect("uploadlist.jsp");
			
//			return;
//		}
//		int uploadFileNo = 
//			Integer.parseInt(req.getParameter("uploadfileno"));
//		System.out.println(uploadfieno);
//		//2. 1의 첨부파일번호로 데이터베이스 첨부파일 정보 조회
//		//   (없으면 uploadview로 이동)
//		UploadFileDao dao = new UploadFileDao();
//		UploadFile file = 
//			dao.getUploadFileByUploadFileNo(uploadFileNo);
//		if (file == null) {
//			response.setContentType("text/html;charset=euc-kr");
//			PrintWriter out = response.getWriter();
//			out.println("<script type='text/javascript'>");
//			out.println("alert('다운로드 실패');");
//			out.println("history.back();");//이전 페이지로 이동
//			out.println("</script>");
//			
//			return;
//		}
		//upload 사항이 없고 다운로드만 하기 때문에 DB table 만들지 않고 바로 다운로드 처리
		//3. 다운로드 처리
		String fileName = req.getParameter("game_Tetris.exe");
		String saveFolder = "C://game";
//		String path = 
//			req.getServletContext().getRealPath("/WEB-INF/views/upload/file/game_Tetris.exe");
//		File file2 = new File(path, file.getSavedFileName());
		File file = new File("C://game/game_Tetris.exe");
//		if (!file2.exists()) {//다운로드 요청한 파일이 없는 경우 (목록으로 이동)
//			response.setContentType("text/html;charset=euc-kr");
//			PrintWriter out = response.getWriter();
//			out.println("<script type='text/javascript'>");
//			out.println("alert('다운로드 실패');");
//			out.println("history.back();");//이전 페이지로 이동
//			out.println("</script>");
//			return;
//		}
//		
		//다운로드 횟수 증가
//		dao.increaseUploadFileDownloadCount(uploadFileNo);

		//다운로드 처리
		//1. 브라우저에게 처리할 수 없는 컨텐츠로 알려주어서 다운로드 처리하도록 지정
		res.setContentType("application/octet-stream");
		res.setContentType("application/unknown");

		//2. 다운로드 처리할 때 필요한 정보 제공
		res.addHeader("Content-Disposition", 
			"Attachment;Filename=\"" +		
				new String("game_Tetris.exe".getBytes("euc-kr"), "ISO-8859-1")
				.replace("+", "%20") + 
				"\"");

		//3. 파일을 응답스트림에 기록
		BufferedInputStream istream = 
			new BufferedInputStream(new FileInputStream(file));
		BufferedOutputStream ostream = 
			new BufferedOutputStream(res.getOutputStream());
		while (true) {
			int data = istream.read();
			if (data != -1) 
				ostream.write(data);
			else
				break;
		}
		istream.close();
		ostream.close();
//		
		// 실제로 파일을 실행하는 구간------------------------------------
		
//		Runtime rt = Runtime.getRuntime();
//		System.out.println("directory: " + path);
//		Process p;
//		try {
//			p = rt.exec(path);
//			p.waitFor();
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		// 실제로 파일을 실행하는 구간------------------------------------
		RequestDispatcher dispatcher = 
			    req.getRequestDispatcher("/WEB-INF/views/tetris/tetrisheader.jsp");
			    
			    dispatcher.forward(req,res);
	}		



	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}












